C#: Adopt shared variable capture library #15665
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adopts the shared variable capture library to C#.
Previously, the SSA library had ad-hoc support for variable capture, but that support has now been removed (actually, we still allow captured variables where all writes happen in the defining method), and we instead rely solely on the implementation from the shared library.
The implementation of the input to the shared library is somewhat standard, except local functions need to be treated as if they were lambdas, which prompts the need for additional synthetic nodes (
LocalFunctionCreationNode) and local/jump steps (LocalFunctionCreationNode.getAnAccess).Since the SSA library now has limited support for captured variables, we apply control-flow insensitive data flow through captured variables when resolving lambda calls.
DCA reports a bunch of new results, as expected, including a new TP in WebGoat, where data flows through a captured string builder.